{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 当日各项指标的同/环比情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>order_id</th>\n",
       "      <th>城市</th>\n",
       "      <th>省份</th>\n",
       "      <th>创建日期</th>\n",
       "      <th>付款日期</th>\n",
       "      <th>收货日期</th>\n",
       "      <th>退款日期</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>北京市</td>\n",
       "      <td>北京</td>\n",
       "      <td>2021-04-04</td>\n",
       "      <td>2021-04-07</td>\n",
       "      <td>2021-04-13</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>福州市</td>\n",
       "      <td>福建省</td>\n",
       "      <td>2021-04-02</td>\n",
       "      <td>2021-04-10</td>\n",
       "      <td>1970-01-01</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>广州市</td>\n",
       "      <td>广东省</td>\n",
       "      <td>2021-04-05</td>\n",
       "      <td>1970-01-01</td>\n",
       "      <td>1970-01-01</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>桂林市</td>\n",
       "      <td>广西壮族自治区</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-02</td>\n",
       "      <td>2021-04-09</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>郑州市</td>\n",
       "      <td>河南省</td>\n",
       "      <td>2021-04-09</td>\n",
       "      <td>1970-01-01</td>\n",
       "      <td>1970-01-01</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>495</th>\n",
       "      <td>496</td>\n",
       "      <td>贵阳市</td>\n",
       "      <td>贵州省</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-21</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>496</th>\n",
       "      <td>497</td>\n",
       "      <td>北京市</td>\n",
       "      <td>北京</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-03</td>\n",
       "      <td>2021-04-06</td>\n",
       "      <td>2021-04-10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>497</th>\n",
       "      <td>498</td>\n",
       "      <td>贵阳市</td>\n",
       "      <td>贵州省</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-07</td>\n",
       "      <td>2021-04-15</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>498</th>\n",
       "      <td>499</td>\n",
       "      <td>广州市</td>\n",
       "      <td>广东省</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-09</td>\n",
       "      <td>2021-04-12</td>\n",
       "      <td>2021-04-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>499</th>\n",
       "      <td>500</td>\n",
       "      <td>北京市</td>\n",
       "      <td>北京</td>\n",
       "      <td>2021-04-11</td>\n",
       "      <td>2021-04-06</td>\n",
       "      <td>1970-01-01</td>\n",
       "      <td>1970-01-01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>500 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     order_id   城市       省份       创建日期       付款日期       收货日期       退款日期\n",
       "0           1  北京市       北京 2021-04-04 2021-04-07 2021-04-13 1970-01-01\n",
       "1           2  福州市      福建省 2021-04-02 2021-04-10 1970-01-01 1970-01-01\n",
       "2           3  广州市      广东省 2021-04-05 1970-01-01 1970-01-01 1970-01-01\n",
       "3           4  桂林市  广西壮族自治区 2021-04-11 2021-04-02 2021-04-09 1970-01-01\n",
       "4           5  郑州市      河南省 2021-04-09 1970-01-01 1970-01-01 1970-01-01\n",
       "..        ...  ...      ...        ...        ...        ...        ...\n",
       "495       496  贵阳市      贵州省 2021-04-11 2021-04-11 2021-04-21 1970-01-01\n",
       "496       497  北京市       北京 2021-04-11 2021-04-03 2021-04-06 2021-04-10\n",
       "497       498  贵阳市      贵州省 2021-04-11 2021-04-07 2021-04-15 1970-01-01\n",
       "498       499  广州市      广东省 2021-04-11 2021-04-09 2021-04-12 2021-04-21\n",
       "499       500  北京市       北京 2021-04-11 2021-04-06 1970-01-01 1970-01-01\n",
       "\n",
       "[500 rows x 7 columns]"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df = pd.read_excel(r'D:\\Data-Science\\share\\excel-python报表自动化\\sale_data.xlsx')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(date):   \n",
    "    create_cnt = df[df['创建日期'] == date]['order_id'].count()\n",
    "    pay_cnt = df[df['付款日期'] == date]['order_id'].count()\n",
    "    receive_cnt = df[df['收货日期'] == date]['order_id'].count()\n",
    "    return_cnt = df[df['退款日期'] == date]['order_id'].count()\n",
    "    return create_cnt,pay_cnt,receive_cnt,return_cnt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>当日</th>\n",
       "      <th>昨日</th>\n",
       "      <th>上周同期</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>创建订单量</th>\n",
       "      <td>50</td>\n",
       "      <td>80</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>付款订单量</th>\n",
       "      <td>30</td>\n",
       "      <td>55</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>收货订单量</th>\n",
       "      <td>27</td>\n",
       "      <td>28</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>退款订单量</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       当日  昨日  上周同期\n",
       "创建订单量  50  80    40\n",
       "付款订单量  30  55    25\n",
       "收货订单量  27  28    15\n",
       "退款订单量   4   5     3"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_view = pd.DataFrame([get_data('2021-04-11')\n",
    "                     ,get_data('2021-04-10')\n",
    "                     ,get_data('2021-04-04')]\n",
    "                     ,columns = ['创建订单量','付款订单量','收货订单量','退款订单量']\n",
    "                     ,index = ['当日','昨日','上周同期']).T\n",
    "df_view"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>当日</th>\n",
       "      <th>昨日</th>\n",
       "      <th>上周同期</th>\n",
       "      <th>环比</th>\n",
       "      <th>同比</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>创建订单量</th>\n",
       "      <td>50</td>\n",
       "      <td>80</td>\n",
       "      <td>40</td>\n",
       "      <td>-0.375000</td>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>付款订单量</th>\n",
       "      <td>30</td>\n",
       "      <td>55</td>\n",
       "      <td>25</td>\n",
       "      <td>-0.454545</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>收货订单量</th>\n",
       "      <td>27</td>\n",
       "      <td>28</td>\n",
       "      <td>15</td>\n",
       "      <td>-0.035714</td>\n",
       "      <td>0.800000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>退款订单量</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>-0.200000</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       当日  昨日  上周同期        环比        同比\n",
       "创建订单量  50  80    40 -0.375000  0.250000\n",
       "付款订单量  30  55    25 -0.454545  0.200000\n",
       "收货订单量  27  28    15 -0.035714  0.800000\n",
       "退款订单量   4   5     3 -0.200000  0.333333"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_view['环比'] = df_view['当日'] / df_view['昨日'] - 1\n",
    "df_view['同比'] = df_view['当日'] / df_view['上周同期'] - 1\n",
    "df_view"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.utils.dataframe import dataframe_to_rows\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "for r in dataframe_to_rows(df_view,index = True,header = True):\n",
    "    ws.append(r)\n",
    "\n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\核心指标_原始.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.utils.dataframe import dataframe_to_rows\n",
    "from openpyxl.styles import colors\n",
    "from openpyxl.styles import Font\n",
    "from openpyxl.styles import PatternFill\n",
    "from openpyxl.styles import Border, Side\n",
    "from openpyxl.styles import Alignment\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "for r in dataframe_to_rows(df_view,index = True,header = True):\n",
    "    ws.append(r)\n",
    "\n",
    "ws.delete_rows(2)\n",
    "ws['A1'] = '指标'\n",
    "\n",
    "ws.insert_rows(1)\n",
    "ws['A1'] = '电商业务方向 2021/4/11 日报'\n",
    "\n",
    "ws.merge_cells('A1:F1') #合并单元格\n",
    "\n",
    "for row in ws[1:6]:\n",
    "    for r in row:\n",
    "        r.font = Font(name = '微软雅黑',size = 12)\n",
    "        r.alignment = Alignment(horizontal = \"center\")\n",
    "        r.border = Border(left = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   right = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   top = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   bottom = Side(border_style = \"thin\",color = \"FF000000\"))\n",
    "\n",
    "for row in ws[1:2]:\n",
    "    for r in row:\n",
    "        r.font = Font(name = '微软雅黑',size = 12,bold = True,color = \"FFFFFFFF\")\n",
    "        r.fill = PatternFill(fill_type = 'solid',start_color='FFFF6100')\n",
    "        \n",
    "for col in ws[\"E\":\"F\"]:\n",
    "    for c in col:\n",
    "        c.number_format = '0.00%'\n",
    "\n",
    "#调整列宽\n",
    "ws.column_dimensions['A'].width = 13\n",
    "ws.column_dimensions['E'].width = 10\n",
    "        \n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\核心指标.xlsx')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 当日各省份创建订单量情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>省份</th>\n",
       "      <th>创建订单量</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>北京</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>广西壮族自治区</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>甘肃省</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>福建省</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>贵州省</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>河南省</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>海南省</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>安徽省</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>河北省</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>广东省</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        省份  创建订单量\n",
       "0       北京      7\n",
       "3  广西壮族自治区      7\n",
       "7      甘肃省      6\n",
       "8      福建省      6\n",
       "9      贵州省      6\n",
       "5      河南省      5\n",
       "6      海南省      5\n",
       "1      安徽省      3\n",
       "4      河北省      3\n",
       "2      广东省      2"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_province = pd.DataFrame(df[df['创建日期'] == '2021-04-11']\n",
    "                           .groupby('省份')['order_id'].count())\n",
    "df_province = df_province.reset_index()\n",
    "df_province = df_province.sort_values(by = 'order_id',ascending = False)\n",
    "df_province = df_province.rename(columns = {'order_id':'创建订单量'})\n",
    "df_province"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.utils.dataframe import dataframe_to_rows\n",
    "from openpyxl.styles import colors\n",
    "from openpyxl.styles import Font\n",
    "from openpyxl.styles import PatternFill\n",
    "from openpyxl.styles import Border, Side\n",
    "from openpyxl.styles import Alignment\n",
    "from openpyxl.formatting.rule import DataBarRule\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "for r in dataframe_to_rows(df_province,index = False,header = True):\n",
    "    ws.append(r)\n",
    "\n",
    "for row in ws[1:11]:\n",
    "    for r in row:\n",
    "        r.font = Font(name = '微软雅黑',size = 12)\n",
    "        r.alignment = Alignment(horizontal = \"center\")\n",
    "        r.border = Border(left = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   right = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   top = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   bottom = Side(border_style = \"thin\",color = \"FF000000\"))\n",
    "\n",
    "rule = DataBarRule(start_type = 'min',end_type = 'max',\n",
    "                    color=\"FF638EC6\", showValue=True, minLength=None, maxLength=None)\n",
    "    \n",
    "ws.conditional_formatting.add('B1:B11',rule)\n",
    "\n",
    "for r in ws[1]:\n",
    "    r.font = Font(name = '微软雅黑',size = 12,bold = True,color = \"FFFFFFFF\")\n",
    "    r.fill = PatternFill(fill_type = 'solid',start_color='FFFF6100')\n",
    "        \n",
    "\n",
    "#调整列宽\n",
    "ws.column_dimensions['A'].width = 17\n",
    "ws.column_dimensions['B'].width = 13\n",
    "        \n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\各省份销量情况.xlsx')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 最近一段时间创建订单量趋势"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams[\"font.sans-serif\"]='SimHei'#解决中文乱码\n",
    "plt.figure(figsize = (10,6))\n",
    "df.groupby('创建日期')['order_id'].count().plot()\n",
    "plt.title('4.2 - 4.11 创建订单量分日趋势')\n",
    "plt.xlabel('日期')\n",
    "plt.ylabel('订单量')\n",
    "plt.savefig(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams[\"font.sans-serif\"]='SimHei'#解决中文乱码\n",
    "plt.figure(figsize = (10,6))\n",
    "df.groupby('创建日期')['order_id'].count().plot()\n",
    "plt.title('4.2 - 4.11 创建订单量分日趋势')\n",
    "plt.xlabel('日期')\n",
    "plt.ylabel('订单量')\n",
    "plt.savefig(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.drawing.image import Image\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "img = Image(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.png')\n",
    "\n",
    "ws.add_image(img, 'A1')\n",
    "\n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.xlsx')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 将不同的结果进行合并"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 将不同的结果合并到同一个 Sheet 中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.utils.dataframe import dataframe_to_rows\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "#先将核心指标df_view表插入进去\n",
    "for r in dataframe_to_rows(df_view,index = True,header = True):\n",
    "    ws.append(r)\n",
    "\n",
    "#再将各省份情况df_province表插入进去\n",
    "#先将表头插入\n",
    "for j in range(df_province.shape[1]):\n",
    "    ws.cell(row = df_view.shape[0] + 5,column = 1 + j).value = df_province.columns[j]\n",
    "\n",
    "#再把具体的值插入\n",
    "for i in range(df_province.shape[0]):\n",
    "    for j in range(df_province.shape[1]):\n",
    "        ws.cell(row = df_view.shape[0] + 6 + i,column = 1 + j).value = df_province.iloc[i,j]\n",
    "\n",
    "#插入图片\n",
    "img = Image(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.png')\n",
    "ws.add_image(img, 'G1')\n",
    "\n",
    "#将结果文件进行保存\n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\多结果合并.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.utils.dataframe import dataframe_to_rows\n",
    "from openpyxl.styles import colors\n",
    "from openpyxl.styles import Font\n",
    "from openpyxl.styles import PatternFill\n",
    "from openpyxl.styles import Border, Side\n",
    "from openpyxl.styles import Alignment\n",
    "from openpyxl.formatting.rule import DataBarRule\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "#先将核心指标df_view表插入进去\n",
    "for r in dataframe_to_rows(df_view,index = True,header = True):\n",
    "    ws.append(r)\n",
    "\n",
    "#再将各省份情况df_province表插入进去\n",
    "#先将表头插入\n",
    "for j in range(df_province.shape[1]):\n",
    "    ws.cell(row = df_view.shape[0] + 5,column = 1 + j).value = df_province.columns[j]\n",
    "\n",
    "#再把具体的值插入\n",
    "#先遍历行\n",
    "for i in range(df_province.shape[0]):\n",
    "    #再遍历列\n",
    "    for j in range(df_province.shape[1]):\n",
    "        ws.cell(row = df_view.shape[0] + 6 + i,column = 1 + j).value = df_province.iloc[i,j]\n",
    "\n",
    "#插入图片\n",
    "img = Image(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.png')\n",
    "ws.add_image(img, 'G1')\n",
    "\n",
    "##---格式调整---\n",
    "ws.delete_rows(2)\n",
    "ws['A1'] = '指标'\n",
    "\n",
    "ws.insert_rows(1)\n",
    "ws['A1'] = '电商业务方向 2021/4/11 日报'\n",
    "\n",
    "ws.merge_cells('A1:F1') #合并单元格\n",
    "\n",
    "#格式预设\n",
    "\n",
    "#表头字体设置\n",
    "title_Font_style = Font(name = '微软雅黑',size = 12,bold = True,color = \"FFFFFFFF\")\n",
    "#普通内容字体设置\n",
    "plain_Font_style = Font(name = '微软雅黑',size = 12)\n",
    "Alignment_style = Alignment(horizontal = \"center\")\n",
    "Border_style = Border(left = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   right = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   top = Side(border_style = \"thin\",color = \"FF000000\"),\n",
    "                   bottom = Side(border_style = \"thin\",color = \"FF000000\"))\n",
    "PatternFill_style = PatternFill(fill_type = 'solid',start_color='FFFF6100')\n",
    "\n",
    "#对A1至F6范围内的单元格进行设置\n",
    "for col in ws['A1':'F6']:\n",
    "    for c in col:\n",
    "        c.font = plain_Font_style\n",
    "        c.alignment = Alignment_style\n",
    "        c.border = Border_style\n",
    "\n",
    "#对第1行和第2行的单元格进行设置\n",
    "for row in ws[1:2]:\n",
    "    for r in row:\n",
    "        r.font = title_Font_style\n",
    "        r.fill = PatternFill_style\n",
    "\n",
    "#对E列和F列的单元格进行设置\n",
    "for col in ws[\"E\":\"F\"]:\n",
    "    for c in col:\n",
    "        c.number_format = '0.00%'\n",
    "\n",
    "#对A9至B19范围内的单元格进行设置\n",
    "for row in ws['A9':'B19']:\n",
    "    for r in row:\n",
    "        r.font = plain_Font_style\n",
    "        r.alignment = Alignment_style\n",
    "        r.border = Border_style\n",
    "\n",
    "#对A9至B9范围内的单元格进行设置\n",
    "for row in ws['A9':'B9']:\n",
    "    for r in row:\n",
    "        r.font = title_Font_style\n",
    "        r.fill = PatternFill_style\n",
    "        \n",
    "#设置进度条\n",
    "rule = DataBarRule(start_type = 'min',end_type = 'max',\n",
    "                    color=\"FF638EC6\", showValue=True, minLength=None, maxLength=None)\n",
    "ws.conditional_formatting.add('B10:B19',rule)\n",
    "\n",
    "#调整列宽\n",
    "ws.column_dimensions['A'].width = 17\n",
    "ws.column_dimensions['B'].width = 13\n",
    "ws.column_dimensions['E'].width = 10\n",
    "\n",
    "#将结果文件进行保存\n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\多结果合并.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 2)"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_province.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>当日</th>\n",
       "      <th>昨日</th>\n",
       "      <th>上周同期</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>创建订单量</th>\n",
       "      <td>50</td>\n",
       "      <td>80</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>付款订单量</th>\n",
       "      <td>30</td>\n",
       "      <td>55</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>收货订单量</th>\n",
       "      <td>27</td>\n",
       "      <td>28</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>退款订单量</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       当日  昨日  上周同期\n",
       "创建订单量  50  80    40\n",
       "付款订单量  30  55    25\n",
       "收货订单量  27  28    15\n",
       "退款订单量   4   5     3"
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_view"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 将不同的结果合并到同一工作簿的不同 Sheet 中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [],
   "source": [
    "from openpyxl import Workbook\n",
    "from openpyxl.utils.dataframe import dataframe_to_rows\n",
    "\n",
    "wb = Workbook()\n",
    "ws = wb.active\n",
    "\n",
    "ws1 = wb.create_sheet()\n",
    "ws2 = wb.create_sheet()\n",
    "\n",
    "#更改sheet的名称\n",
    "ws.title = \"核心指标\" \n",
    "ws1.title = \"各省份销情况\" \n",
    "ws2.title = \"分日趋势\" \n",
    "\n",
    "for r1 in dataframe_to_rows(df_view,index = True,header = True):\n",
    "    ws.append(r1)\n",
    "\n",
    "for r2 in dataframe_to_rows(df_province,index = False,header = True):\n",
    "    ws1.append(r2)\n",
    "\n",
    "img = Image(r'D:\\Data-Science\\share\\excel-python报表自动化\\4.2 - 4.11 创建订单量分日趋势.png')\n",
    "\n",
    "ws2.add_image(img, 'A1')\n",
    "\n",
    "wb.save(r'D:\\Data-Science\\share\\excel-python报表自动化\\多结果合并_多Sheet.xlsx')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
